package com.example.yin.handler;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.util.Date;
/**
//这是一个基于 MyBatis-Plus 的元对象处理器实现类，用于自动填充实体类中的公共字段（如创建时间、更新时间等）。
*/
@Component
//技术实现原理：MyBatis-Plus 提供的回调接口+执行 SQL 操作前后触发
public class MyMetaObjectHandler implements MetaObjectHandler {
    @Override
    //当执行插入操作时，自动设置以下字段
    //MetaObject：MyBatis 的反射工具类 可以操作对象的属性，无需知道具体类型
    public void insertFill(MetaObject metaObject) {
        this.setFieldValByName("createTime", new Date(), metaObject);
        this.setFieldValByName("updateTime", new Date(), metaObject);
    }
/*setFieldValByName 方法：

参数1：字段名

参数2：字段值

参数3：元对象*/
    @Override
    //当执行更新操作时，自动设置
    public void updateFill(MetaObject metaObject) {
        this.setFieldValByName("updateTime", new Date(), metaObject);
    }
}
/**使用前提条件
实体类字段标记：
需要在实体类中{@TableField(fill = FieldFill.INSERT)
private Date createTime;

@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;}
使用 @TableField 注解标记自动填充字段：*/
/*字段填充策略：

填充策略	说明
FieldFill.DEFAULT	不处理
FieldFill.INSERT	插入时填充
FieldFill.UPDATE	更新时填充
FieldFill.INSERT_UPDATE	插入和更新时都填充
*/
